e106b121f99b84bfd301df61b41574631e73f993
1 /* eslint-disable camelcase */
2 /* eslint no-underscore-dangle: "off" */
4 var mockFilterStructure
= [ {
7 type
: 'send_unselected_if_any',
9 { name
: 'filter1', cssClass
: 'filter1class', default: true },
10 { name
: 'filter2', cssClass
: 'filter2class' }
15 type
: 'send_unselected_if_any',
17 { name
: 'filter3', cssClass
: 'filter3class' },
18 { name
: 'filter4', cssClass
: 'filter4class', default: true }
23 type
: 'string_options',
25 { name
: 'filter5', cssClass
: 'filter5class' },
26 { name
: 'filter6' } // Not supporting highlights
34 { name
: 'stickyFilter7', cssClass
: 'filter7class' },
35 { name
: 'stickyFilter8', cssClass
: 'filter8class' }
38 minimalDefaultParams
= {
43 QUnit
.module( 'mediawiki.rcfilters - UriProcessor' );
45 QUnit
.test( 'getVersion', function ( assert
) {
46 var uriProcessor
= new mw
.rcfilters
.UriProcessor( new mw
.rcfilters
.dm
.FiltersViewModel() );
49 uriProcessor
.getVersion( { param1
: 'foo', urlversion
: '2' } ),
51 'Retrieving the version from the URI query'
55 uriProcessor
.getVersion( { param1
: 'foo' } ),
57 'Getting version 1 if no version is specified'
61 QUnit
.test( 'getUpdatedUri', function ( assert
) {
63 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel();
65 filtersModel
.initializeFilters( mockFilterStructure
);
66 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
69 ( uriProcessor
.getUpdatedUri( {} ) ).query
,
71 'Empty model state with empty uri state, assumes the given uri is already normalized, and adds urlversion=2'
75 ( uriProcessor
.getUpdatedUri( { foo
: 'bar' } ) ).query
,
76 { urlversion
: '2', foo
: 'bar' },
77 'Empty model state with unrecognized params retains unrecognized params'
81 filtersModel
.toggleFiltersSelected( {
82 group1__filter1
: true, // Param: filter2: '1'
83 group3__filter5
: true // Param: group3: 'filter5'
87 ( uriProcessor
.getUpdatedUri( {} ) ).query
,
88 { urlversion
: '2', filter2
: '1', group3
: 'filter5' },
89 'Model state is reflected in the updated URI'
93 ( uriProcessor
.getUpdatedUri( { foo
: 'bar' } ) ).query
,
94 { urlversion
: '2', filter2
: '1', group3
: 'filter5', foo
: 'bar' },
95 'Model state is reflected in the updated URI with existing uri params'
99 QUnit
.test( 'updateModelBasedOnQuery', function ( assert
) {
101 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel();
103 filtersModel
.initializeFilters( mockFilterStructure
);
104 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
106 uriProcessor
.updateModelBasedOnQuery( {} );
108 filtersModel
.getCurrentParameterState(),
109 minimalDefaultParams
,
110 'Version 1: Empty url query sets model to defaults'
113 uriProcessor
.updateModelBasedOnQuery( { urlversion
: '2' } );
115 filtersModel
.getCurrentParameterState(),
117 'Version 2: Empty url query sets model to all-false'
120 uriProcessor
.updateModelBasedOnQuery( { filter1
: '1', urlversion
: '2' } );
122 filtersModel
.getCurrentParameterState(),
123 $.extend( true, {}, { filter1
: '1' } ),
124 'Parameters in Uri query set parameter value in the model'
128 QUnit
.test( 'isNewState', function ( assert
) {
130 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel(),
138 message
: 'Empty objects are not new state.'
142 curr
: { filter1
: '1' },
143 new: { filter1
: '0' }
146 message
: 'Nulified parameter is a new state'
150 curr
: { filter1
: '1' },
151 new: { filter1
: '1', filter2
: '1' }
154 message
: 'Added parameters are a new state'
158 curr
: { filter1
: '1' },
159 new: { filter1
: '1', filter2
: '0' }
162 message
: 'Added null parameters are not a new state (normalizing equals old state)'
166 curr
: { filter1
: '1' },
167 new: { filter1
: '1', foo
: 'bar' }
170 message
: 'Added unrecognized parameters are a new state'
174 curr
: { filter1
: '1', foo
: 'bar' },
175 new: { filter1
: '1', foo
: 'baz' }
178 message
: 'Changed unrecognized parameters are a new state'
182 filtersModel
.initializeFilters( mockFilterStructure
);
183 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
185 cases
.forEach( function ( testCase
) {
187 uriProcessor
.isNewState( testCase
.states
.curr
, testCase
.states
.new ),
194 QUnit
.test( 'doesQueryContainRecognizedParams', function ( assert
) {
196 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel(),
201 message
: 'Empty query is not valid for load.'
204 query
: { highlight
: '1' },
206 message
: 'Highlight state alone is not valid for load'
209 query
: { urlversion
: '2' },
211 message
: 'urlversion=2 state alone is valid for load as an empty state'
214 query
: { filter1
: '1', foo
: 'bar' },
216 message
: 'Existence of recognized parameters makes the query valid for load'
219 query
: { foo
: 'bar', debug
: true },
221 message
: 'Only unrecognized parameters makes the query invalid for load'
225 filtersModel
.initializeFilters( mockFilterStructure
);
226 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
228 cases
.forEach( function ( testCase
) {
230 uriProcessor
.doesQueryContainRecognizedParams( testCase
.query
),
237 QUnit
.test( '_getNormalizedQueryParams', function ( assert
) {
239 filtersModel
= new mw
.rcfilters
.dm
.FiltersViewModel(),
243 result
: $.extend( true, { urlversion
: '2' }, minimalDefaultParams
),
244 message
: 'Empty query returns defaults (urlversion 1).'
247 query
: { urlversion
: '2' },
248 result
: { urlversion
: '2' },
249 message
: 'Empty query returns empty (urlversion 2)'
252 query
: { filter1
: '0' },
253 result
: { urlversion
: '2', filter4
: '1' },
254 message
: 'urlversion 1 returns query that overrides defaults'
257 query
: { filter3
: '1' },
258 result
: { urlversion
: '2', filter1
: '1', filter4
: '1', filter3
: '1' },
259 message
: 'urlversion 1 with an extra param value returns query that is joined with defaults'
263 filtersModel
.initializeFilters( mockFilterStructure
);
264 uriProcessor
= new mw
.rcfilters
.UriProcessor( filtersModel
);
266 cases
.forEach( function ( testCase
) {
268 uriProcessor
._getNormalizedQueryParams( testCase
.query
),
275 }( mediaWiki
, jQuery
) );